//使用分组背包问题解决此题

#include <bits/stdc++.h>
using namespace std;

int s , n , m;
int dp[20010] , ans , a[110][110];				//假设第i座城堡第j多的玩家派出了a[i][j]名士兵

int main(){
	scanf("%d%d%d" , &s , &n , &m);
	for(int i = 1 ; i <= s ; i ++)
		for(int j = 1 ; j <= n ; j ++)
			scanf("%d" , &a[j][i]);
			//读入
	for(int i = 1 ; i <= n ; i ++)
		sort(a[i] + 1 , a[i] + s + 1);
		//排序
	for(int i = 1 ; i <= n ; i ++)
		for(int j = m ; j >= 0 ; j --)
			for(int k = 1 ; k <= s ; k ++)
				if(j > a[i][k] * 2)
					dp[j] = max(dp[j] , dp[j - a[i][k] * 2 - 1] + i * k);
					//根据如果派出兵力大于了a[i][k] * 2  + 1 那多余的一定是浪费的
	for(int i = 0 ; i <= m ; i ++) 
		ans = max(ans , dp[i]);
		//定义答案
	printf("%d",ans);			//输出
	return 0;
}
